package com.wzf.sword.jvm.size;

import java.lang.instrument.Instrumentation;

/**
 * 计算对象占用存储空间的工具类
 * 
 * @author wuzhengfei
 *
 */
public class ObjectSizeInstrument {
    static Instrumentation instrumentation;

    public static void premain(String args, Instrumentation instP) {
        instrumentation = instP;
    }

    /**
     * 计算当前对象占用空间大小
     * <li>包括：当前类及超类的基本类型实例字段大小、引用类型实例字段引用大小、实例基本类型数组总占用空间、实例引用类型数组引用本身占用空间大小;
     * <li>不包括：类继承下来的和当前类声明的实例引用字段的对象本身的大小、实例引用数组引用的对象本身的大小<br>
     * 
     * @param obj
     * @return
     */
    public static long size(Object obj) {
        return instrumentation.getObjectSize(obj);
    }

}